{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h1> Explore and create ML datasets </h1>\n",
    "\n",
    "In this notebook, we will explore data corresponding to taxi rides in New York City to build a Machine Learning model in support of a fare-estimation tool. The idea is to suggest a likely fare to taxi riders so that they are not surprised, and so that they can protest if the charge is much higher than expected.\n",
    "\n",
    "<div id=\"toc\"></div>\n",
    "\n",
    "Let's start off with the Python imports that we need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from google.cloud import bigquery\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import shutil"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3> Extract sample data from BigQuery </h3>\n",
    "\n",
    "The dataset that we will use is <a href=\"https://bigquery.cloud.google.com/table/nyc-tlc:yellow.trips\">a BigQuery public dataset</a>. Click on the link, and look at the column names. Switch to the Details tab to verify that the number of records is one billion, and then switch to the Preview tab to look at a few rows.\n",
    "\n",
    "Let's write a SQL query to pick up interesting fields from the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "sql = \"\"\"\n",
    "  SELECT\n",
    "    pickup_datetime, pickup_longitude, pickup_latitude, dropoff_longitude,\n",
    "    dropoff_latitude, passenger_count, trip_distance, tolls_amount, \n",
    "    fare_amount, total_amount \n",
    "  FROM `nyc-tlc.yellow.trips`\n",
    "  LIMIT 10\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_datetime</th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>trip_distance</th>\n",
       "      <th>tolls_amount</th>\n",
       "      <th>fare_amount</th>\n",
       "      <th>total_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2010-03-15 17:18:34+00:00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-03-18 01:07:02+00:00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-04-29 18:45:03+00:00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2013-08-24 01:58:23+00:00</td>\n",
       "      <td>-73.972171</td>\n",
       "      <td>40.759439</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-04-26 02:56:37+00:00</td>\n",
       "      <td>-73.987656</td>\n",
       "      <td>40.771656</td>\n",
       "      <td>-73.987556</td>\n",
       "      <td>40.771751</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2015-03-09 18:24:03+00:00</td>\n",
       "      <td>-73.937248</td>\n",
       "      <td>40.758202</td>\n",
       "      <td>-73.937263</td>\n",
       "      <td>40.758190</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2010-03-04 00:35:16+00:00</td>\n",
       "      <td>-74.035201</td>\n",
       "      <td>40.721548</td>\n",
       "      <td>-74.035201</td>\n",
       "      <td>40.721548</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2013-08-07 00:42:45+00:00</td>\n",
       "      <td>-74.025817</td>\n",
       "      <td>40.763044</td>\n",
       "      <td>-74.046752</td>\n",
       "      <td>40.783240</td>\n",
       "      <td>1</td>\n",
       "      <td>4.8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2010-03-11 21:24:48+00:00</td>\n",
       "      <td>-74.571511</td>\n",
       "      <td>40.910800</td>\n",
       "      <td>-74.628928</td>\n",
       "      <td>40.964321</td>\n",
       "      <td>1</td>\n",
       "      <td>68.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2010-03-06 06:33:41+00:00</td>\n",
       "      <td>-73.785514</td>\n",
       "      <td>40.645400</td>\n",
       "      <td>-73.784564</td>\n",
       "      <td>40.648681</td>\n",
       "      <td>2</td>\n",
       "      <td>4.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            pickup_datetime  pickup_longitude  pickup_latitude  \\\n",
       "0 2010-03-15 17:18:34+00:00          0.000000         0.000000   \n",
       "1 2015-03-18 01:07:02+00:00          0.000000         0.000000   \n",
       "2 2015-04-29 18:45:03+00:00          0.000000         0.000000   \n",
       "3 2013-08-24 01:58:23+00:00        -73.972171        40.759439   \n",
       "4 2015-04-26 02:56:37+00:00        -73.987656        40.771656   \n",
       "5 2015-03-09 18:24:03+00:00        -73.937248        40.758202   \n",
       "6 2010-03-04 00:35:16+00:00        -74.035201        40.721548   \n",
       "7 2013-08-07 00:42:45+00:00        -74.025817        40.763044   \n",
       "8 2010-03-11 21:24:48+00:00        -74.571511        40.910800   \n",
       "9 2010-03-06 06:33:41+00:00        -73.785514        40.645400   \n",
       "\n",
       "   dropoff_longitude  dropoff_latitude  passenger_count  trip_distance  \\\n",
       "0           0.000000          0.000000                1            0.0   \n",
       "1           0.000000          0.000000                5            0.0   \n",
       "2           0.000000          0.000000                1            1.0   \n",
       "3           0.000000          0.000000                4            0.0   \n",
       "4         -73.987556         40.771751                1            0.0   \n",
       "5         -73.937263         40.758190                1            0.0   \n",
       "6         -74.035201         40.721548                1            0.0   \n",
       "7         -74.046752         40.783240                1            4.8   \n",
       "8         -74.628928         40.964321                1           68.4   \n",
       "9         -73.784564         40.648681                2            4.1   \n",
       "\n",
       "   tolls_amount  fare_amount  total_amount  \n",
       "0           0.0          0.0           0.0  \n",
       "1           0.0          0.0           0.0  \n",
       "2           0.0          0.0           0.0  \n",
       "3           0.0          0.0           0.0  \n",
       "4           0.0          0.0           0.0  \n",
       "5           0.0          0.0           0.0  \n",
       "6           0.0          0.0           0.0  \n",
       "7           0.0          0.0           0.0  \n",
       "8           0.0          0.0           0.0  \n",
       "9           0.0          0.0           0.0  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "client = bigquery.Client()\n",
    "trips = client.query(sql).to_dataframe()\n",
    "trips"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's increase the number of records so that we can do some neat graphs.  There is no guarantee about the order in which records are returned, and so no guarantee about which records get returned if we simply increase the LIMIT. To properly sample the dataset, let's use the HASH of the pickup time and return 1 in 100,000 records -- because there are 1 billion records in the data, we should get back approximately 10,000 records if we do this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "sql = \"\"\"\n",
    "  SELECT\n",
    "    pickup_datetime,\n",
    "    pickup_longitude, pickup_latitude, \n",
    "    dropoff_longitude, dropoff_latitude,\n",
    "    passenger_count,\n",
    "    trip_distance,\n",
    "    tolls_amount,\n",
    "    fare_amount,\n",
    "    total_amount\n",
    "  FROM\n",
    "    `nyc-tlc.yellow.trips`\n",
    "  WHERE\n",
    "    ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 100000)) = 1\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_datetime</th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>trip_distance</th>\n",
       "      <th>tolls_amount</th>\n",
       "      <th>fare_amount</th>\n",
       "      <th>total_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2009-07-04 08:36:00+00:00</td>\n",
       "      <td>-73.992533</td>\n",
       "      <td>40.756207</td>\n",
       "      <td>-73.992555</td>\n",
       "      <td>40.756205</td>\n",
       "      <td>1</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2009-08-20 23:04:58+00:00</td>\n",
       "      <td>-73.980657</td>\n",
       "      <td>40.765322</td>\n",
       "      <td>-73.962737</td>\n",
       "      <td>40.769690</td>\n",
       "      <td>1</td>\n",
       "      <td>2.50</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2009-09-04 21:49:30+00:00</td>\n",
       "      <td>-73.991085</td>\n",
       "      <td>40.755503</td>\n",
       "      <td>-73.991185</td>\n",
       "      <td>40.755543</td>\n",
       "      <td>1</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2009-08-31 13:27:07+00:00</td>\n",
       "      <td>-73.979360</td>\n",
       "      <td>40.735598</td>\n",
       "      <td>-73.971661</td>\n",
       "      <td>40.758827</td>\n",
       "      <td>1</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2009-09-28 17:47:22+00:00</td>\n",
       "      <td>-73.984128</td>\n",
       "      <td>40.780583</td>\n",
       "      <td>-73.984141</td>\n",
       "      <td>40.780562</td>\n",
       "      <td>1</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2009-05-27 20:37:00+00:00</td>\n",
       "      <td>-73.967982</td>\n",
       "      <td>40.762537</td>\n",
       "      <td>-73.967553</td>\n",
       "      <td>40.761778</td>\n",
       "      <td>5</td>\n",
       "      <td>0.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2011-06-19 12:39:56+00:00</td>\n",
       "      <td>-73.994080</td>\n",
       "      <td>40.751073</td>\n",
       "      <td>-73.994097</td>\n",
       "      <td>40.751091</td>\n",
       "      <td>1</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2013-12-06 14:55:00+00:00</td>\n",
       "      <td>-73.988727</td>\n",
       "      <td>40.773987</td>\n",
       "      <td>-73.988755</td>\n",
       "      <td>40.774037</td>\n",
       "      <td>5</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2009-09-30 22:58:14+00:00</td>\n",
       "      <td>-73.988954</td>\n",
       "      <td>40.758612</td>\n",
       "      <td>-73.952118</td>\n",
       "      <td>40.776227</td>\n",
       "      <td>2</td>\n",
       "      <td>4.70</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2014-05-17 15:15:00+00:00</td>\n",
       "      <td>-73.990825</td>\n",
       "      <td>40.750897</td>\n",
       "      <td>-73.990795</td>\n",
       "      <td>40.750872</td>\n",
       "      <td>6</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            pickup_datetime  pickup_longitude  pickup_latitude  \\\n",
       "0 2009-07-04 08:36:00+00:00        -73.992533        40.756207   \n",
       "1 2009-08-20 23:04:58+00:00        -73.980657        40.765322   \n",
       "2 2009-09-04 21:49:30+00:00        -73.991085        40.755503   \n",
       "3 2009-08-31 13:27:07+00:00        -73.979360        40.735598   \n",
       "4 2009-09-28 17:47:22+00:00        -73.984128        40.780583   \n",
       "5 2009-05-27 20:37:00+00:00        -73.967982        40.762537   \n",
       "6 2011-06-19 12:39:56+00:00        -73.994080        40.751073   \n",
       "7 2013-12-06 14:55:00+00:00        -73.988727        40.773987   \n",
       "8 2009-09-30 22:58:14+00:00        -73.988954        40.758612   \n",
       "9 2014-05-17 15:15:00+00:00        -73.990825        40.750897   \n",
       "\n",
       "   dropoff_longitude  dropoff_latitude  passenger_count  trip_distance  \\\n",
       "0         -73.992555         40.756205                1           0.00   \n",
       "1         -73.962737         40.769690                1           2.50   \n",
       "2         -73.991185         40.755543                1           0.00   \n",
       "3         -73.971661         40.758827                1           1.80   \n",
       "4         -73.984141         40.780562                1           0.00   \n",
       "5         -73.967553         40.761778                5           0.07   \n",
       "6         -73.994097         40.751091                1           0.00   \n",
       "7         -73.988755         40.774037                5           0.00   \n",
       "8         -73.952118         40.776227                2           4.70   \n",
       "9         -73.990795         40.750872                6           0.00   \n",
       "\n",
       "   tolls_amount  fare_amount  total_amount  \n",
       "0           0.0          2.5           2.5  \n",
       "1           0.0          2.5           2.5  \n",
       "2           0.0          2.5           2.5  \n",
       "3           0.0          2.5           2.5  \n",
       "4           0.0          2.5           2.5  \n",
       "5           0.0          2.5           3.0  \n",
       "6           0.0          2.5           3.0  \n",
       "7           0.0          2.5           3.0  \n",
       "8           0.0          2.5           3.0  \n",
       "9           0.0          2.5           3.0  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trips = client.query(sql).to_dataframe()\n",
    "trips[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3> Exploring data </h3>\n",
    "\n",
    "Let's explore this dataset and clean it up as necessary. We'll use the Python Seaborn package to visualize graphs and Pandas to do the slicing and filtering."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/envs/py3env/lib/python3.5/site-packages/matplotlib/font_manager.py:1320: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
      "  (prop.get_family(), self.defaultFamily[fontext]))\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5c1eb862b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.regplot(x=\"trip_distance\", y=\"fare_amount\", fit_reg=False, ci=None, truncate=True, data=trips)\n",
    "ax.figure.set_size_inches(10, 8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hmm ... do you see something wrong with the data that needs addressing?\n",
    "\n",
    "It appears that we have a lot of invalid data that is being coded as zero distance and some fare amounts that are definitely illegitimate. Let's remove them from our analysis. We can do this by modifying the BigQuery query to keep only trips longer than zero miles and fare amounts that are at least the minimum cab fare ($2.50).\n",
    "\n",
    "Note the extra WHERE clauses."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "sql = \"\"\"\n",
    "  SELECT\n",
    "    pickup_datetime,\n",
    "    pickup_longitude, pickup_latitude, \n",
    "    dropoff_longitude, dropoff_latitude,\n",
    "    passenger_count,\n",
    "    trip_distance,\n",
    "    tolls_amount,\n",
    "    fare_amount,\n",
    "    total_amount\n",
    "  FROM\n",
    "    `nyc-tlc.yellow.trips`\n",
    "  WHERE\n",
    "    ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 100000)) = 1\n",
    "    AND trip_distance > 0 AND fare_amount >= 2.5\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/envs/py3env/lib/python3.5/site-packages/matplotlib/font_manager.py:1320: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
      "  (prop.get_family(), self.defaultFamily[fontext]))\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5c1da5a518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trips = client.query(sql).to_dataframe()\n",
    "ax = sns.regplot(x=\"trip_distance\", y=\"fare_amount\", fit_reg=False, ci=None, truncate=True, data=trips)\n",
    "ax.figure.set_size_inches(10, 8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What's up with the streaks at \\$45 and \\$50?  Those are fixed-amount rides from JFK and La Guardia airports into anywhere in Manhattan, i.e. to be expected. Let's list the data to make sure the values look reasonable.\n",
    "\n",
    "Let's examine whether the toll amount is captured in the total amount."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_datetime</th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>trip_distance</th>\n",
       "      <th>tolls_amount</th>\n",
       "      <th>fare_amount</th>\n",
       "      <th>total_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5302</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.865723</td>\n",
       "      <td>40.770543</td>\n",
       "      <td>-73.984790</td>\n",
       "      <td>40.758760</td>\n",
       "      <td>1</td>\n",
       "      <td>12.32</td>\n",
       "      <td>5.50</td>\n",
       "      <td>32.5</td>\n",
       "      <td>45.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5713</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.969748</td>\n",
       "      <td>40.759790</td>\n",
       "      <td>-73.872892</td>\n",
       "      <td>40.774297</td>\n",
       "      <td>1</td>\n",
       "      <td>10.15</td>\n",
       "      <td>4.57</td>\n",
       "      <td>24.5</td>\n",
       "      <td>29.57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5776</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.870773</td>\n",
       "      <td>40.773753</td>\n",
       "      <td>-73.984963</td>\n",
       "      <td>40.757590</td>\n",
       "      <td>1</td>\n",
       "      <td>10.97</td>\n",
       "      <td>4.57</td>\n",
       "      <td>28.5</td>\n",
       "      <td>33.57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5887</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.789942</td>\n",
       "      <td>40.646943</td>\n",
       "      <td>-73.974362</td>\n",
       "      <td>40.756418</td>\n",
       "      <td>2</td>\n",
       "      <td>16.84</td>\n",
       "      <td>4.57</td>\n",
       "      <td>45.0</td>\n",
       "      <td>50.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7153</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.862715</td>\n",
       "      <td>40.768987</td>\n",
       "      <td>-74.007195</td>\n",
       "      <td>40.707480</td>\n",
       "      <td>1</td>\n",
       "      <td>13.17</td>\n",
       "      <td>4.57</td>\n",
       "      <td>32.9</td>\n",
       "      <td>44.55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7249</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.870928</td>\n",
       "      <td>40.773747</td>\n",
       "      <td>-73.983638</td>\n",
       "      <td>40.752948</td>\n",
       "      <td>1</td>\n",
       "      <td>8.63</td>\n",
       "      <td>4.57</td>\n",
       "      <td>25.7</td>\n",
       "      <td>30.77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7269</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-74.006398</td>\n",
       "      <td>40.738450</td>\n",
       "      <td>-73.872652</td>\n",
       "      <td>40.774357</td>\n",
       "      <td>2</td>\n",
       "      <td>10.67</td>\n",
       "      <td>4.57</td>\n",
       "      <td>29.7</td>\n",
       "      <td>39.77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7275</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-74.008322</td>\n",
       "      <td>40.735337</td>\n",
       "      <td>-74.177383</td>\n",
       "      <td>40.695083</td>\n",
       "      <td>1</td>\n",
       "      <td>15.86</td>\n",
       "      <td>10.00</td>\n",
       "      <td>49.9</td>\n",
       "      <td>69.88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8215</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.991303</td>\n",
       "      <td>40.749965</td>\n",
       "      <td>-73.714585</td>\n",
       "      <td>40.745767</td>\n",
       "      <td>2</td>\n",
       "      <td>18.68</td>\n",
       "      <td>4.57</td>\n",
       "      <td>47.3</td>\n",
       "      <td>61.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9692</th>\n",
       "      <td>2010-04-29 12:28:00+00:00</td>\n",
       "      <td>-73.950105</td>\n",
       "      <td>40.827105</td>\n",
       "      <td>-73.861490</td>\n",
       "      <td>40.768172</td>\n",
       "      <td>1</td>\n",
       "      <td>9.06</td>\n",
       "      <td>4.57</td>\n",
       "      <td>23.3</td>\n",
       "      <td>28.37</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               pickup_datetime  pickup_longitude  pickup_latitude  \\\n",
       "5302 2010-04-29 12:28:00+00:00        -73.865723        40.770543   \n",
       "5713 2010-04-29 12:28:00+00:00        -73.969748        40.759790   \n",
       "5776 2010-04-29 12:28:00+00:00        -73.870773        40.773753   \n",
       "5887 2010-04-29 12:28:00+00:00        -73.789942        40.646943   \n",
       "7153 2010-04-29 12:28:00+00:00        -73.862715        40.768987   \n",
       "7249 2010-04-29 12:28:00+00:00        -73.870928        40.773747   \n",
       "7269 2010-04-29 12:28:00+00:00        -74.006398        40.738450   \n",
       "7275 2010-04-29 12:28:00+00:00        -74.008322        40.735337   \n",
       "8215 2010-04-29 12:28:00+00:00        -73.991303        40.749965   \n",
       "9692 2010-04-29 12:28:00+00:00        -73.950105        40.827105   \n",
       "\n",
       "      dropoff_longitude  dropoff_latitude  passenger_count  trip_distance  \\\n",
       "5302         -73.984790         40.758760                1          12.32   \n",
       "5713         -73.872892         40.774297                1          10.15   \n",
       "5776         -73.984963         40.757590                1          10.97   \n",
       "5887         -73.974362         40.756418                2          16.84   \n",
       "7153         -74.007195         40.707480                1          13.17   \n",
       "7249         -73.983638         40.752948                1           8.63   \n",
       "7269         -73.872652         40.774357                2          10.67   \n",
       "7275         -74.177383         40.695083                1          15.86   \n",
       "8215         -73.714585         40.745767                2          18.68   \n",
       "9692         -73.861490         40.768172                1           9.06   \n",
       "\n",
       "      tolls_amount  fare_amount  total_amount  \n",
       "5302          5.50         32.5         45.00  \n",
       "5713          4.57         24.5         29.57  \n",
       "5776          4.57         28.5         33.57  \n",
       "5887          4.57         45.0         50.07  \n",
       "7153          4.57         32.9         44.55  \n",
       "7249          4.57         25.7         30.77  \n",
       "7269          4.57         29.7         39.77  \n",
       "7275         10.00         49.9         69.88  \n",
       "8215          4.57         47.3         61.83  \n",
       "9692          4.57         23.3         28.37  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tollrides = trips[trips['tolls_amount'] > 0]\n",
    "tollrides[tollrides['pickup_datetime'] == '2010-04-29 12:28:00']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looking a few samples above, it should be clear that the total amount reflects fare amount, toll and tip somewhat arbitrarily -- this is because when customers pay cash, the tip is not known.  So, we'll use the sum of fare_amount + tolls_amount as what needs to be predicted.  Tips are discretionary and do not have to be included in our fare estimation tool.\n",
    "\n",
    "Let's also look at the distribution of values within the columns."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>trip_distance</th>\n",
       "      <th>tolls_amount</th>\n",
       "      <th>fare_amount</th>\n",
       "      <th>total_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "      <td>10716.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-72.602192</td>\n",
       "      <td>40.002372</td>\n",
       "      <td>-72.594838</td>\n",
       "      <td>40.002052</td>\n",
       "      <td>1.650056</td>\n",
       "      <td>2.856395</td>\n",
       "      <td>0.226428</td>\n",
       "      <td>11.109446</td>\n",
       "      <td>13.217078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>9.982373</td>\n",
       "      <td>5.474670</td>\n",
       "      <td>10.004324</td>\n",
       "      <td>5.474648</td>\n",
       "      <td>1.283577</td>\n",
       "      <td>3.322024</td>\n",
       "      <td>1.135934</td>\n",
       "      <td>9.137710</td>\n",
       "      <td>10.953156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-74.258183</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-74.260472</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.500000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-73.992153</td>\n",
       "      <td>40.735936</td>\n",
       "      <td>-73.991566</td>\n",
       "      <td>40.734310</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.040000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>7.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-73.981851</td>\n",
       "      <td>40.753264</td>\n",
       "      <td>-73.980373</td>\n",
       "      <td>40.752956</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.770000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.500000</td>\n",
       "      <td>10.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-73.967400</td>\n",
       "      <td>40.767340</td>\n",
       "      <td>-73.964142</td>\n",
       "      <td>40.767510</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.160000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>12.500000</td>\n",
       "      <td>14.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>42.800000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>179.000000</td>\n",
       "      <td>179.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pickup_longitude  pickup_latitude  dropoff_longitude  dropoff_latitude  \\\n",
       "count      10716.000000     10716.000000       10716.000000      10716.000000   \n",
       "mean         -72.602192        40.002372         -72.594838         40.002052   \n",
       "std            9.982373         5.474670          10.004324          5.474648   \n",
       "min          -74.258183         0.000000         -74.260472          0.000000   \n",
       "25%          -73.992153        40.735936         -73.991566         40.734310   \n",
       "50%          -73.981851        40.753264         -73.980373         40.752956   \n",
       "75%          -73.967400        40.767340         -73.964142         40.767510   \n",
       "max            0.000000        41.366138           0.000000         41.366138   \n",
       "\n",
       "       passenger_count  trip_distance  tolls_amount   fare_amount  \\\n",
       "count     10716.000000   10716.000000  10716.000000  10716.000000   \n",
       "mean          1.650056       2.856395      0.226428     11.109446   \n",
       "std           1.283577       3.322024      1.135934      9.137710   \n",
       "min           0.000000       0.010000      0.000000      2.500000   \n",
       "25%           1.000000       1.040000      0.000000      6.000000   \n",
       "50%           1.000000       1.770000      0.000000      8.500000   \n",
       "75%           2.000000       3.160000      0.000000     12.500000   \n",
       "max           6.000000      42.800000     16.000000    179.000000   \n",
       "\n",
       "       total_amount  \n",
       "count  10716.000000  \n",
       "mean      13.217078  \n",
       "std       10.953156  \n",
       "min        2.500000  \n",
       "25%        7.300000  \n",
       "50%       10.000000  \n",
       "75%       14.600000  \n",
       "max      179.000000  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trips.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hmm ... The min, max of longitude look strange.\n",
    "\n",
    "Finally, let's actually look at the start and end of a few of the trips."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/envs/py3env/lib/python3.5/site-packages/matplotlib/font_manager.py:1320: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
      "  (prop.get_family(), self.defaultFamily[fontext]))\n"
     ]
    },
    {
     "data": {
      "image/png": "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JwoUAABAOVGgAAAAyokCBQAAUE4UKAAAgHKiQAEAAJQTBQoAAKCcKFAAAADlRIECAAAoJwoUAABAOVGgAAAAyokCBQAAUE4UKAAAgHKiQAEAAJQTBQoAAKCcDJvNZjM7BAAAgCPhESgAAIByokABAACUEwUKAACgnChQAAAA5USBAgAAKCcKFAAAQDlRoCpg9OjR6t+/v/r376+uXbuqf//+V1737rvvqnv37urZs6fWrl1rYsrqN2vWLPXs2VN9+vTRq6++euXlrniTt99+W506dbrydbJ69eorr3PFe/zSf/7zHzVr1kynTp2SJNlsNr344ovq3r27+vXrp23btpmcsPq88cYb6tevn/r376+HHnpI6enpklz3Jq+88op69eqlfv36adSoUcrNzb3yOlf9c7Ns2TL16dNHzZs315YtW0q8zlVvsmbNGvXs2VPdu3fXtGnTzAtiww2ZOnWq7e2337bZbDbb7t27bf369bPl5eXZDh06ZOvWrZutoKDA5ITV4/vvv7eNHDnSlpeXZ7PZbLasrCybzea6N3nrrbds7733XqmXu+o9fnbs2DHbQw89ZLv99tttJ0+etNlsNts333xje/jhh21FRUW2jRs32gYPHmxyyupz5syZK7+eMWOGbfz48TabzXVvsnbtWlt+fr7NZrPZXn31Vdurr75qs9lc+8/Nnj17bHv37rUNGzbMlpaWduXlrnqTgoICW7du3WyHDh2y5eXl2fr162fbvXu3KVl4BOoG2Gw2LVu2TH379pUkrVy5Un369JGHh4fq1aunBg0aKC0tzeSU1WPu3Ll65JFH5OHhIUkKCQmR5No3+TWufo+pU6fq6aeflmEYV162cuVKDRgwQIZhKCYmRrm5ucrIyDAxZfXx8/O78usLFy5cuYur3uS2226T1WqVJMXExOjEiROSXPvPTVRUlCIjI0u93FVvkpaWpgYNGqhevXry8PBQnz59tHLlSlOyUKBuQEpKikJCQtSwYUNJUnp6uiIiIq68Pjw8/MpD8s7uwIEDSklJ0ZAhQzRs2LArf5Bd+SZz5sxRv379NHbsWOXk5Ehy7XusXLlSYWFhat68eYmX/+9NIiIiXOYmkvT666+rS5cu+uyzz/THP/5REjeRpE8++USdO3eW5Np/bq7GVW9iT79vqymf1QEkJCQoKyur1MtHjx6tO++8U5K0ZMmSK48+ScWPSP2vX/6ftqO71k0KCwuVm5urjz76SFu2bNHo0aO1cuVKp77Jte7xwAMP6PHHH5dhGHrzzTf18ssva+rUqU59D+naN3n33Xf1/vvvl3qdK9/kzjvv1JNPPqknn3xS7777rmbPnq0nnnjCqW/y/+3bMUtqYRzH8e/p1ODQ0FAIboFIg/YShEMOlTQkvQAhsMkX0CCkIEE0O0Tg1hBYiy3GoRqssbEmBRucaj8V3iE63O5Nuye4Gj6/z/ic5X9+PI/nf57n+C+/rZVKBdu2WVtbAzRHPjPumfTzk+5bDVQf1Wp14PWXlxcajQa1Ws0fC4fD/pYzvHXKc3Nz/6vEoRuUydHREalUCsuySCQSTExM8PT0NNaZfDVH3m1sbLC1tQWYO0fu7+95eHjw/3DR7XZZX1/n+Pj4r0y63a4RmfwpnU6Ty+XI5/NjnclXeZycnHBxcaR5mbYAAAGeSURBVEG1WvUfjKaum0HGPZN+ftJ96wjvm5rNJvPz8x+2Eh3HoV6v43kenU6HdrtNIpEYYZXDs7S0xM3NDQCtVovn52dmZmaMzeT371XOz8+JRqOAuXMkFotxfX2N67q4rks4HKZWqzE7O4vjOJyentLr9bi9vWV6etqIBwG8HX2/c13X/9bF1Eyurq44ODigUqkQCoX8cVPXzSCmZhKPx2m323Q6HTzPo16v4zjOSGrRDtQ3nZ2dsbq6+mEsGo2yvLzMysoKtm1TKBSwbXtEFQ5XJpNhe3ubdDrN1NQUu7u7WJZlbCZ7e3vc3d0BEIlEKBaLgNlzpJ9kMsnl5SWpVIpQKES5XB51SUOzv79Pq9XCsiwikQg7OzuAuZmUSiU8zyObzQKwuLhIsVg0et00Gg1KpRKPj4/kcjkWFhY4PDw0NpPJyUkKhQKbm5u8vr6SyWT8F9Rhs3qfHSiKiIiISF86whMREREJSA2UiIiISEBqoEREREQCUgMlIiIiEpAaKBEREZGA1ECJiIiIBKQGSkRERCQgNVAiIiIiAf0CWfYWTaGa1YoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5c1c927208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def showrides(df, numlines):\n",
    "  lats = []\n",
    "  lons = []\n",
    "  for iter, row in df[:numlines].iterrows():\n",
    "    lons.append(row['pickup_longitude'])\n",
    "    lons.append(row['dropoff_longitude'])\n",
    "    lons.append(None)\n",
    "    lats.append(row['pickup_latitude'])\n",
    "    lats.append(row['dropoff_latitude'])\n",
    "    lats.append(None)\n",
    "\n",
    "  sns.set_style(\"darkgrid\")\n",
    "  plt.figure(figsize=(10,8))\n",
    "  plt.plot(lons, lats)\n",
    "\n",
    "showrides(trips, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/envs/py3env/lib/python3.5/site-packages/matplotlib/font_manager.py:1320: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
      "  (prop.get_family(), self.defaultFamily[fontext]))\n"
     ]
    },
    {
     "data": {
      "image/png": "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c2EwGIKPb9y4EampqVi6dOnovCMiIiKiCBJSGLPZbNi9ezfuuOMOAIAgCNi3bx9uuukmAMCqVauwY8eOYV9j8+bNWLFixYDHz549C7vdjrlz515o24mIiIgiXkhh7Pnnn8eaNWsglwcOdzgcMBqNUCoDo5xJSUmora0d9jW2bNmC5cuXD3j8448/xs033wyZTHahbSciIiKKeCPeM7Zr1y6YzWbk5eVh//79Qx43XJg6fvw4tFotsrOzB3xvy5YtWLt2bUiNNZl0UCoVIR17uYqPjxa7CTQGWFfpYU2liXWVprGu64hh7MiRI9i5cyf27NkDj8cDl8uF5557Dk6nE16vF0qlEjabDQkJCUO+xubNmwftFTt16hR8Ph/y8vJCaqzD0RrScZer+Pho1Ne3iN0MGmWsq/SwptLEukrTpdQ11BA34jDlk08+iT179mDnzp146aWXsHDhQrz44otYsGABtm3bBgDYsGEDFi9ePOjz/X4/tm7dOuQQ5WCPExEREV0uLnqdsTVr1mD9+vVYsmQJmpqasHr1agDAjh078MorrwSPO3jwIJKSkmC1Wge8xieffMIwRkRERJc1mSAIgtiNCBW7f4fHLnJpYl2lhzWVJtZVmsJimJKIiIiIxg7DGBEREZGIGMaIiIiIRMQwRkRERCQihjEiIiIiETGMEREREYmIYYyIiIhIRAxjRERERCJiGCMiIiISEcMYERERkYgYxoiIiIhExDBGREREJCKGMSIiIiIRMYwRERERiYhhjIiIiEhEDGNEREREImIYIyIiIhIRwxgRERGRiBjGiIiIiETEMEZEREQkIoYxIiIiIhExjBERERGJiGGMiIiISEQMY0REREQiYhgjIiIiEhHDGBEREZGIGMaIiIiIRMQwRkRERCQihjEiIiIiETGMEREREYmIYYyIiIhIRAxjRERERCJiGCMiIiISEcMYERERXTY+2X8OpVXNYjejD4YxIiIiuix4fX58sKsUf99TJnZT+mAYIyIiosuCUiFHolmHs7YW+AVB7OYEMYwRERHRZWNicjTaPF40NLeL3ZQgpdgNICIiIhov112Rik6vH0adSuymBDGMERER0WUj2xqLbGus2M3og8OURERERCJiGCMiIiISEcMYERERkYgYxoiIiIhExDBGREREJCKGMSIiIiIRMYwRERERiYhhjIiIiEhEDGNE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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5c1c95a630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "showrides(tollrides, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you'd expect, rides that involve a toll are longer than the typical ride."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3> Quality control and other preprocessing </h3>\n",
    "\n",
    "We need to some clean-up of the data:\n",
    "<ol>\n",
    "<li>New York city longitudes are around -74 and latitudes are around 41.</li>\n",
    "<li>We shouldn't have zero passengers.</li>\n",
    "<li>Clean up the total_amount column to reflect only fare_amount and tolls_amount, and then remove those two columns.</li>\n",
    "<li>Before the ride starts, we'll know the pickup and dropoff locations, but not the trip distance (that depends on the route taken), so remove it from the ML dataset</li>\n",
    "<li>Discard the timestamp</li>\n",
    "</ol>\n",
    "\n",
    "We could do preprocessing in BigQuery, similar to how we removed the zero-distance rides, but just to show you another option, let's do this in Python.  In production, we'll have to carry out the same preprocessing on the real-time input data. \n",
    "\n",
    "This sort of preprocessing of input data is quite common in ML, especially if the quality-control is dynamic."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>fare_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10476.000000</td>\n",
       "      <td>10476.000000</td>\n",
       "      <td>10476.000000</td>\n",
       "      <td>10476.000000</td>\n",
       "      <td>10476.000000</td>\n",
       "      <td>10476.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-73.975206</td>\n",
       "      <td>40.751526</td>\n",
       "      <td>-73.974373</td>\n",
       "      <td>40.751199</td>\n",
       "      <td>1.653303</td>\n",
       "      <td>11.349003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.038547</td>\n",
       "      <td>0.029187</td>\n",
       "      <td>0.039086</td>\n",
       "      <td>0.033147</td>\n",
       "      <td>1.278827</td>\n",
       "      <td>9.878630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-74.258183</td>\n",
       "      <td>40.452290</td>\n",
       "      <td>-74.260472</td>\n",
       "      <td>40.417750</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-73.992336</td>\n",
       "      <td>40.737600</td>\n",
       "      <td>-73.991739</td>\n",
       "      <td>40.735904</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-73.982090</td>\n",
       "      <td>40.754020</td>\n",
       "      <td>-73.980780</td>\n",
       "      <td>40.753597</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-73.968517</td>\n",
       "      <td>40.767774</td>\n",
       "      <td>-73.965851</td>\n",
       "      <td>40.767921</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>12.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-73.137393</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>-73.137393</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>179.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pickup_longitude  pickup_latitude  dropoff_longitude  dropoff_latitude  \\\n",
       "count      10476.000000     10476.000000       10476.000000      10476.000000   \n",
       "mean         -73.975206        40.751526         -73.974373         40.751199   \n",
       "std            0.038547         0.029187           0.039086          0.033147   \n",
       "min          -74.258183        40.452290         -74.260472         40.417750   \n",
       "25%          -73.992336        40.737600         -73.991739         40.735904   \n",
       "50%          -73.982090        40.754020         -73.980780         40.753597   \n",
       "75%          -73.968517        40.767774         -73.965851         40.767921   \n",
       "max          -73.137393        41.366138         -73.137393         41.366138   \n",
       "\n",
       "       passenger_count   fare_amount  \n",
       "count     10476.000000  10476.000000  \n",
       "mean          1.653303     11.349003  \n",
       "std           1.278827      9.878630  \n",
       "min           1.000000      2.500000  \n",
       "25%           1.000000      6.000000  \n",
       "50%           1.000000      8.500000  \n",
       "75%           2.000000     12.500000  \n",
       "max           6.000000    179.000000  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def preprocess(trips_in):\n",
    "  trips = trips_in.copy(deep=True)\n",
    "  trips.fare_amount = trips.fare_amount + trips.tolls_amount\n",
    "  del trips['tolls_amount']\n",
    "  del trips['total_amount']\n",
    "  del trips['trip_distance']\n",
    "  del trips['pickup_datetime']\n",
    "  qc = np.all([\\\n",
    "             trips['pickup_longitude'] > -78, \\\n",
    "             trips['pickup_longitude'] < -70, \\\n",
    "             trips['dropoff_longitude'] > -78, \\\n",
    "             trips['dropoff_longitude'] < -70, \\\n",
    "             trips['pickup_latitude'] > 37, \\\n",
    "             trips['pickup_latitude'] < 45, \\\n",
    "             trips['dropoff_latitude'] > 37, \\\n",
    "             trips['dropoff_latitude'] < 45, \\\n",
    "             trips['passenger_count'] > 0,\n",
    "            ], axis=0)\n",
    "  return trips[qc]\n",
    "\n",
    "tripsqc = preprocess(trips)\n",
    "tripsqc.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The quality control has removed about 300 rows (11400 - 11101) or about 3% of the data. This seems reasonable.\n",
    "\n",
    "Let's move on to creating the ML datasets.\n",
    "\n",
    "<h3> Create ML datasets </h3>\n",
    "\n",
    "Let's split the QCed data randomly into training, validation and test sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "shuffled = tripsqc.sample(frac=1)\n",
    "trainsize = int(len(shuffled['fare_amount']) * 0.70)\n",
    "validsize = int(len(shuffled['fare_amount']) * 0.15)\n",
    "\n",
    "df_train = shuffled.iloc[:trainsize, :]\n",
    "df_valid = shuffled.iloc[trainsize:(trainsize+validsize), :]\n",
    "df_test = shuffled.iloc[(trainsize+validsize):, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>fare_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>7333.000000</td>\n",
       "      <td>7333.000000</td>\n",
       "      <td>7333.000000</td>\n",
       "      <td>7333.000000</td>\n",
       "      <td>7333.000000</td>\n",
       "      <td>7333.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-73.975107</td>\n",
       "      <td>40.751321</td>\n",
       "      <td>-73.974045</td>\n",
       "      <td>40.750991</td>\n",
       "      <td>1.644211</td>\n",
       "      <td>11.403187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.039297</td>\n",
       "      <td>0.029180</td>\n",
       "      <td>0.041209</td>\n",
       "      <td>0.034105</td>\n",
       "      <td>1.267472</td>\n",
       "      <td>9.992344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-74.258183</td>\n",
       "      <td>40.608573</td>\n",
       "      <td>-74.260472</td>\n",
       "      <td>40.569997</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-73.992417</td>\n",
       "      <td>40.737124</td>\n",
       "      <td>-73.991743</td>\n",
       "      <td>40.735540</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-73.982063</td>\n",
       "      <td>40.753595</td>\n",
       "      <td>-73.980860</td>\n",
       "      <td>40.753443</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-73.968425</td>\n",
       "      <td>40.767697</td>\n",
       "      <td>-73.965537</td>\n",
       "      <td>40.767534</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>12.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-73.137393</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>-73.137393</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>179.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pickup_longitude  pickup_latitude  dropoff_longitude  dropoff_latitude  \\\n",
       "count       7333.000000      7333.000000        7333.000000       7333.000000   \n",
       "mean         -73.975107        40.751321         -73.974045         40.750991   \n",
       "std            0.039297         0.029180           0.041209          0.034105   \n",
       "min          -74.258183        40.608573         -74.260472         40.569997   \n",
       "25%          -73.992417        40.737124         -73.991743         40.735540   \n",
       "50%          -73.982063        40.753595         -73.980860         40.753443   \n",
       "75%          -73.968425        40.767697         -73.965537         40.767534   \n",
       "max          -73.137393        41.366138         -73.137393         41.366138   \n",
       "\n",
       "       passenger_count  fare_amount  \n",
       "count      7333.000000  7333.000000  \n",
       "mean          1.644211    11.403187  \n",
       "std           1.267472     9.992344  \n",
       "min           1.000000     2.500000  \n",
       "25%           1.000000     6.000000  \n",
       "50%           1.000000     8.500000  \n",
       "75%           2.000000    12.500000  \n",
       "max           6.000000   179.000000  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>fare_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1571.000000</td>\n",
       "      <td>1571.000000</td>\n",
       "      <td>1571.000000</td>\n",
       "      <td>1571.000000</td>\n",
       "      <td>1571.000000</td>\n",
       "      <td>1571.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-73.976283</td>\n",
       "      <td>40.752817</td>\n",
       "      <td>-73.974124</td>\n",
       "      <td>40.751598</td>\n",
       "      <td>1.650541</td>\n",
       "      <td>11.340872</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.031142</td>\n",
       "      <td>0.027018</td>\n",
       "      <td>0.035942</td>\n",
       "      <td>0.032263</td>\n",
       "      <td>1.280214</td>\n",
       "      <td>9.726946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-74.031669</td>\n",
       "      <td>40.452290</td>\n",
       "      <td>-74.182035</td>\n",
       "      <td>40.417750</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-73.991907</td>\n",
       "      <td>40.738636</td>\n",
       "      <td>-73.991120</td>\n",
       "      <td>40.737029</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-73.981914</td>\n",
       "      <td>40.755783</td>\n",
       "      <td>-73.979670</td>\n",
       "      <td>40.754025</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-73.968597</td>\n",
       "      <td>40.768646</td>\n",
       "      <td>-73.964645</td>\n",
       "      <td>40.769946</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>12.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-73.694077</td>\n",
       "      <td>40.865671</td>\n",
       "      <td>-73.679133</td>\n",
       "      <td>40.879257</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>93.750000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pickup_longitude  pickup_latitude  dropoff_longitude  dropoff_latitude  \\\n",
       "count       1571.000000      1571.000000        1571.000000       1571.000000   \n",
       "mean         -73.976283        40.752817         -73.974124         40.751598   \n",
       "std            0.031142         0.027018           0.035942          0.032263   \n",
       "min          -74.031669        40.452290         -74.182035         40.417750   \n",
       "25%          -73.991907        40.738636         -73.991120         40.737029   \n",
       "50%          -73.981914        40.755783         -73.979670         40.754025   \n",
       "75%          -73.968597        40.768646         -73.964645         40.769946   \n",
       "max          -73.694077        40.865671         -73.679133         40.879257   \n",
       "\n",
       "       passenger_count  fare_amount  \n",
       "count      1571.000000  1571.000000  \n",
       "mean          1.650541    11.340872  \n",
       "std           1.280214     9.726946  \n",
       "min           1.000000     2.500000  \n",
       "25%           1.000000     6.000000  \n",
       "50%           1.000000     8.500000  \n",
       "75%           2.000000    12.500000  \n",
       "max           6.000000    93.750000  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_valid.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pickup_longitude</th>\n",
       "      <th>pickup_latitude</th>\n",
       "      <th>dropoff_longitude</th>\n",
       "      <th>dropoff_latitude</th>\n",
       "      <th>passenger_count</th>\n",
       "      <th>fare_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1572.000000</td>\n",
       "      <td>1572.000000</td>\n",
       "      <td>1572.000000</td>\n",
       "      <td>1572.000000</td>\n",
       "      <td>1572.000000</td>\n",
       "      <td>1572.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-73.974595</td>\n",
       "      <td>40.751187</td>\n",
       "      <td>-73.976153</td>\n",
       "      <td>40.751767</td>\n",
       "      <td>1.698473</td>\n",
       "      <td>11.104377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.041589</td>\n",
       "      <td>0.031223</td>\n",
       "      <td>0.031079</td>\n",
       "      <td>0.029270</td>\n",
       "      <td>1.329075</td>\n",
       "      <td>9.490205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-74.116582</td>\n",
       "      <td>40.633522</td>\n",
       "      <td>-74.155750</td>\n",
       "      <td>40.610602</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-73.992554</td>\n",
       "      <td>40.737898</td>\n",
       "      <td>-73.992351</td>\n",
       "      <td>40.735920</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-73.982347</td>\n",
       "      <td>40.753726</td>\n",
       "      <td>-73.981396</td>\n",
       "      <td>40.754341</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-73.969030</td>\n",
       "      <td>40.766664</td>\n",
       "      <td>-73.967797</td>\n",
       "      <td>40.767822</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>12.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-73.137393</td>\n",
       "      <td>41.366138</td>\n",
       "      <td>-73.744892</td>\n",
       "      <td>41.001380</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>120.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pickup_longitude  pickup_latitude  dropoff_longitude  dropoff_latitude  \\\n",
       "count       1572.000000      1572.000000        1572.000000       1572.000000   \n",
       "mean         -73.974595        40.751187         -73.976153         40.751767   \n",
       "std            0.041589         0.031223           0.031079          0.029270   \n",
       "min          -74.116582        40.633522         -74.155750         40.610602   \n",
       "25%          -73.992554        40.737898         -73.992351         40.735920   \n",
       "50%          -73.982347        40.753726         -73.981396         40.754341   \n",
       "75%          -73.969030        40.766664         -73.967797         40.767822   \n",
       "max          -73.137393        41.366138         -73.744892         41.001380   \n",
       "\n",
       "       passenger_count  fare_amount  \n",
       "count      1572.000000  1572.000000  \n",
       "mean          1.698473    11.104377  \n",
       "std           1.329075     9.490205  \n",
       "min           1.000000     2.500000  \n",
       "25%           1.000000     6.000000  \n",
       "50%           1.000000     8.500000  \n",
       "75%           2.000000    12.100000  \n",
       "max           6.000000   120.000000  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's write out the three dataframes to appropriately named csv files. We can use these csv files for local training (recall that these files represent only 1/100,000 of the full dataset) until we get to point of using Dataflow and Cloud ML."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['fare_amount', 'pickup_longitude', 'pickup_latitude', 'dropoff_longitude', 'dropoff_latitude', 'passenger_count', 'key']\n",
      "['fare_amount', 'pickup_longitude', 'pickup_latitude', 'dropoff_longitude', 'dropoff_latitude', 'passenger_count', 'key']\n",
      "['fare_amount', 'pickup_longitude', 'pickup_latitude', 'dropoff_longitude', 'dropoff_latitude', 'passenger_count', 'key']\n"
     ]
    }
   ],
   "source": [
    "def to_csv(df, filename):\n",
    "  outdf = df.copy(deep=False)\n",
    "  outdf.loc[:, 'key'] = np.arange(0, len(outdf)) # rownumber as key\n",
    "  # reorder columns so that target is first column\n",
    "  cols = outdf.columns.tolist()\n",
    "  cols.remove('fare_amount')\n",
    "  cols.insert(0, 'fare_amount')\n",
    "  print (cols)  # new order of columns\n",
    "  outdf = outdf[cols]\n",
    "  outdf.to_csv(filename, header=False, index_label=False, index=False)\n",
    "\n",
    "to_csv(df_train, 'taxi-train.csv')\n",
    "to_csv(df_valid, 'taxi-valid.csv')\n",
    "to_csv(df_test, 'taxi-test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "21.0,-73.975305,40.790067,-73.996612,40.733275,1,0\n",
      "12.0,-73.993325,40.736502,-73.969148,40.752752,5,1\n",
      "9.0,-73.982121,40.778384,-73.972623,40.796093,1,2\n",
      "5.3,-73.997942,40.735735,-73.98547,40.738608,2,3\n",
      "10.5,-73.986543,40.730283,-74.006965,40.705447,1,4\n",
      "25.7,-73.956644,40.771152,-74.005279,40.74028,1,5\n",
      "13.7,-73.962352,40.758807,-73.941687,40.811947,1,6\n",
      "8.5,-73.97510528564453,40.7363166809082,-73.98577117919922,40.755611419677734,3,7\n",
      "5.7,-73.96476,40.773025,-73.964673,40.77295,1,8\n",
      "6.6,-73.992046,40.751358,-74.003362,40.737756,1,9\n"
     ]
    }
   ],
   "source": [
    "!head -10 taxi-valid.csv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3> Verify that datasets exist </h3>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r-- 1 root root  85534 Oct 19 21:23 taxi-test.csv\n",
      "-rw-r--r-- 1 root root 402804 Oct 19 21:23 taxi-train.csv\n",
      "-rw-r--r-- 1 root root  85997 Oct 19 21:23 taxi-valid.csv\n"
     ]
    }
   ],
   "source": [
    "!ls -l *.csv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have 3 .csv files corresponding to train, valid, test.  The ratio of file-sizes correspond to our split of the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.0,-73.93219757080078,40.79558181762695,-73.93547058105469,40.80010986328125,1,0\n",
      "4.5,-73.967703,40.756252,-73.972677,40.747745,1,1\n",
      "30.5,-73.86369323730469,40.76985168457031,-73.8174819946289,40.664794921875,1,2\n",
      "4.5,-73.969182,40.766816,-73.962413,40.778255,1,3\n",
      "5.7,-73.975688,40.751843,-73.97884,40.744205,1,4\n",
      "20.5,-73.993289,40.752283,-73.940769,40.788656,1,5\n",
      "4.1,-73.944658,40.779262,-73.954415,40.781145,1,6\n",
      "11.5,-73.834687,40.717252,-73.83961,40.752702,1,7\n",
      "6.9,-73.987127,40.738842,-73.969777,40.759165,1,8\n",
      "4.9,-74.008033,40.722897,-74.000918,40.728945,5,9\n"
     ]
    }
   ],
   "source": [
    "%%bash\n",
    "head taxi-train.csv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looks good! We now have our ML datasets and are ready to train ML models, validate them and evaluate them."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3> Benchmark </h3>\n",
    "\n",
    "Before we start building complex ML models, it is a good idea to come up with a very simple model and use that as a benchmark.\n",
    "\n",
    "My model is going to be to simply divide the mean fare_amount by the mean trip_distance to come up with a rate and use that to predict.  Let's compute the RMSE of such a model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Rate = $2.6002738988685428/km\n",
      "Train RMSE = 7.593609093225721\n",
      "Valid RMSE = 5.440351676399091\n",
      "Test RMSE = 9.328946890495182\n"
     ]
    }
   ],
   "source": [
    "def distance_between(lat1, lon1, lat2, lon2):\n",
    "  # haversine formula to compute distance \"as the crow flies\".  Taxis can't fly of course.\n",
    "  dist = np.degrees(np.arccos(np.minimum(1,np.sin(np.radians(lat1)) * np.sin(np.radians(lat2)) + np.cos(np.radians(lat1)) * np.cos(np.radians(lat2)) * np.cos(np.radians(lon2 - lon1))))) * 60 * 1.515 * 1.609344\n",
    "  return dist\n",
    "\n",
    "def estimate_distance(df):\n",
    "  return distance_between(df['pickuplat'], df['pickuplon'], df['dropofflat'], df['dropofflon'])\n",
    "\n",
    "def compute_rmse(actual, predicted):\n",
    "  return np.sqrt(np.mean((actual-predicted)**2))\n",
    "\n",
    "def print_rmse(df, rate, name):\n",
    "  print (\"{1} RMSE = {0}\".format(compute_rmse(df['fare_amount'], rate*estimate_distance(df)), name))\n",
    "\n",
    "FEATURES = ['pickuplon','pickuplat','dropofflon','dropofflat','passengers']\n",
    "TARGET = 'fare_amount'\n",
    "columns = list([TARGET])\n",
    "columns.extend(FEATURES) # in CSV, target is the first column, after the features\n",
    "columns.append('key')\n",
    "df_train = pd.read_csv('taxi-train.csv', header=None, names=columns)\n",
    "df_valid = pd.read_csv('taxi-valid.csv', header=None, names=columns)\n",
    "df_test = pd.read_csv('taxi-test.csv', header=None, names=columns)\n",
    "rate = df_train['fare_amount'].mean() / estimate_distance(df_train).mean()\n",
    "print (\"Rate = ${0}/km\".format(rate))\n",
    "print_rmse(df_train, rate, 'Train')\n",
    "print_rmse(df_valid, rate, 'Valid') \n",
    "print_rmse(df_test, rate, 'Test') "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h2>Benchmark on same dataset</h2>\n",
    "\n",
    "The RMSE depends on the dataset, and for comparison, we have to evaluate on the same dataset each time. We'll use this query in later labs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final Validation Set RMSE = 7.4158766166380445\n"
     ]
    }
   ],
   "source": [
    "def create_query(phase, EVERY_N):\n",
    "  \"\"\"\n",
    "  phase: 1=train 2=valid\n",
    "  \"\"\"\n",
    "  base_query = \"\"\"\n",
    "SELECT\n",
    "  (tolls_amount + fare_amount) AS fare_amount,\n",
    "  CONCAT(CAST(pickup_datetime AS STRING), CAST(pickup_longitude AS STRING), CAST(pickup_latitude AS STRING), CAST(dropoff_latitude AS STRING), CAST(dropoff_longitude AS STRING)) AS key,\n",
    "  EXTRACT(DAYOFWEEK FROM pickup_datetime)*1.0 AS dayofweek,\n",
    "  EXTRACT(HOUR FROM pickup_datetime)*1.0 AS hourofday,\n",
    "  pickup_longitude AS pickuplon,\n",
    "  pickup_latitude AS pickuplat,\n",
    "  dropoff_longitude AS dropofflon,\n",
    "  dropoff_latitude AS dropofflat,\n",
    "  passenger_count*1.0 AS passengers\n",
    "FROM\n",
    "  `nyc-tlc.yellow.trips`\n",
    "WHERE\n",
    "  trip_distance > 0\n",
    "  AND fare_amount >= 2.5\n",
    "  AND pickup_longitude > -78\n",
    "  AND pickup_longitude < -70\n",
    "  AND dropoff_longitude > -78\n",
    "  AND dropoff_longitude < -70\n",
    "  AND pickup_latitude > 37\n",
    "  AND pickup_latitude < 45\n",
    "  AND dropoff_latitude > 37\n",
    "  AND dropoff_latitude < 45\n",
    "  AND passenger_count > 0\n",
    "  \"\"\"\n",
    "\n",
    "  if EVERY_N == None:\n",
    "    if phase < 2:\n",
    "      # training\n",
    "      query = \"{0} AND ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 4)) < 2\".format(base_query)\n",
    "    else:\n",
    "      query = \"{0} AND ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 4)) = {1}\".format(base_query, phase)\n",
    "  else:\n",
    "      query = \"{0} AND ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), {1})) = {2}\".format(base_query, EVERY_N, phase)\n",
    "    \n",
    "  return query\n",
    "\n",
    "query = create_query(2, 100000)\n",
    "df_valid = client.query(query).to_dataframe()\n",
    "print_rmse(df_valid, 2.56, 'Final Validation Set')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The simple distance-based rule gives us a RMSE of <b>$7.42</b>.  We have to beat this, of course, but you will find that simple rules of thumb like this can be surprisingly difficult to beat.\n",
    "\n",
    "Let's be ambitious, though, and make our goal to build ML models that have a RMSE of less than $6 on the test set."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright 2016 Google Inc.\n",
    "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n",
    "http://www.apache.org/licenses/LICENSE-2.0\n",
    "Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
